
'''
单表查询
# 查询book表书名
getbook = models.Book.objects.get(id=1)
# 增加book内容
# models.Book.objects.create(name='我爱你世界', price=22, publishData='2020-01-22',bookDetail='这本书是我写的，很好看' ,book_publish_id=1)
# 改
models.Book.objects.update_or_create(name='我爱你世界12222', price=99, publishData='2020-01-22', bookDetail='这本书是我写的，很好看',
                                     book_publish_id=1)


#一对一增加方法
models.UserToken.objects.update_or_create(userToken_User = userObj,defaults={'token':token})


'''


from django.db import models
# Create your models here.
class Question(models.Model): #一
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField(verbose_name='date published')

class Choice(models.Model): #多
    question = models.ForeignKey(Question)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

'''
一(Question)对多(Choice)关系
1.前向查询
# 通过Choice类中的question字段属性
Choice.objects.filter(question__pub_date__year=current_year)
2.反向查询
# 通过classname_set
q=Question.objects.get(pk=1)
q.choice_set.filter(choice_text__startswith='Just hacking')
'''

'''
Queryset的使用
Queryset是懒加载的，部分支持链式调用。

支持链式调用的接口：

all接口: 用于查询所有数据
filter接口: 根据条件进行过滤
exclude接口: 同filter，只是相反的逻辑
reverse接口: 把Queryset中的结果倒序排列
distinct接口: 用来进行去重查询
none接口: 返回空的Queryset
不支持链式调用的接口：

get接口：用于查询，存在返回对应的实例，不存在，则抛出DoesNotExist异常
create接口：直接创建一个Model对象
get_or_create接口：根据条件查找，如果没有查找到，就调用create创建
update_or_create接口：同get_or_create，只是用来做更新操作
count接口：用于返回Queryset有多少条记录
latest接口：用于返回最新一条记录，但需要在Model的Meta中定义：get_latest_by = <用来排序的字段>
earliest接口：同上，返回最早的一条记录
first接口：从当前Queryset记录中获取第一条
last接口：同上，获取最后一条
exists接口：返回True或者False，只需要判断Queryset是否有数据用这个接口最合适
bulk_create接口：同create，用来批量创建记录
in_bulk接口：批量查询
update接口： 用来根据条件批量更新记录
delete接口： 同update，这个接口是用来根据条件批量删除记录。update和delete都会出发Django的signal
values接口:当我们明确知道只需要返回某个字段的值，不需要Model实例时，可以使用
values_list接口：同values，但直接返回的是包含tuple的Queryset
'''